package io.gitee.thinkbungee.crud.mongo.bean;

import io.gitee.thinkbungee.crud.mongo.reflection.SerializableFunction;
import io.gitee.thinkbungee.crud.mongo.utils.FunctionResolveUtils;
import org.springframework.data.mongodb.core.query.Update;

/**
 * 更新操作
 *
 * @author chenyichang
 * @date 2022/4/20
 */
public class UpdateBuilder {

    protected Update update = new Update();

    /**
     * 返回update
     */
    public Update build() {
        return this.update;
    }

    /**
     * 使某个属性值 增加某个数量
     *
     * @param property 属性值函数
     * @param count    增加值
     * @param <T>      参数泛型
     * @param <R>      返回泛型
     */
    public <T, R> UpdateBuilder inc(SerializableFunction<T, R> property, Number count) {
        update.inc(FunctionResolveUtils.resolve(property), count);
        return this;
    }
}
